package ltd.hanamaki.unittest.junit.paramters;

import ltd.hanamaki.unittest.junit.JavaSources;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

/**
 * 1. 首先搭建一个测试类 保证能够正常运行
 * 2. 将类的运行方式修改为 迭代运行 @RunWith(Parameterized.class)
 * 2. 准备测试数据 数据是通过集合来存放的 通过二维数组来存放
 * 3. 在测试类中编写 参数数据列表中所对应的 数据类型的属性 来通过构造方法接收参数列表中的数据
 * 4. 将测试方法中的 具体的数据使用 测试类中的属性代替
 */
@RunWith(Parameterized.class)
public class JavaSourcesTest_Paramters {

    private int a;
    private int b;
    private int exp;

    public JavaSourcesTest_Paramters(String a, String b, String exp) {
        this.a = Integer.parseInt(a);
        this.b = Integer.parseInt(b);
        this.exp = Integer.parseInt(exp);
    }

    static JavaSources javaSources;
    @BeforeClass
    public static void setUp() {
        javaSources = new JavaSources();
    }

    /* 将鼠标点击在红色区域 alt +enter */
    @Test
    public void t() {
        int add = javaSources.add(a, b);
        /* 在测试中  要判断 测试的结果是否准确？要使用 断言  Assert */
        /* 使用断言 来判断 预期值和实际值 是否相等  */
        Assert.assertEquals(exp, add);
    }

    /**
     * 被@Parameters 声明的 方法是 测试数据集合
     * @return
     */
    @Parameters
    public static Object[][] parameters() {
        return new String[][]{
                new String[]{"2", "3", "5"},
                new String[]{"3", "3", "6"},
                new String[]{"9", "3", "11"},
                new String[]{"7", "3", "10"}
        };
    }



}
